package cn.itcast.customview.Actrvity;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

import cn.itcast.customview.R;

public class ViewPagerActivity extends AppCompatActivity {

    private static final String TAG ="ViewPagerActivity" ;
    private ViewPager viewPager;
    private TextView tv_title;
    private LinearLayout ll_point_parent;
    private ArrayList<ImageView> imageViewList;

    //ViewPager的使用
    //1.在布局文件中定义ViewPager
    //2.在代码中实例化ViewPager
    //3.准备数据
    //4.设置PagerAdapter-item布局-绑定数据

    //图片资源ID
    private final int[] imageIds={

            R.drawable.ie,
            R.drawable.ib,
            R.drawable.ic,
    };

    //图片标题集合
    private final String[] imageDesrciptions={

            "骁龙865旗舰处理器|索尼6400万高清四摄",
            "4800万前后六摄|120Hz高帧流速屏",
            "无限充电|USB插口x3|新国际组合插孔",

    };
    private int prePosition=0;

    private Handler handler=new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);

            int item=viewPager.getCurrentItem()+1;
            viewPager.setCurrentItem(item);

            //延迟发信息
            handler.sendEmptyMessageDelayed(0,4000);

        }
    };
    /*
    * 是否已经滚动
    * */
       private boolean isScroll=false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_pager);

        viewPager=(ViewPager)findViewById(R.id.viewpager);
        tv_title=(TextView)findViewById(R.id.tv_title);
        ll_point_parent=(LinearLayout)findViewById(R.id.ll_point_parent);

        imageViewList=new ArrayList<>();
         for (int i=0;i<imageIds.length;i++) {

             ImageView imageView = new ImageView(this);
             imageView.setBackgroundResource(imageIds[i]);
             //添加到集合中
             imageViewList.add(imageView);

             //添加点
             ImageView point=new ImageView(this);
             point.setBackgroundResource(R.drawable.point_selector);
             //在代码中设置的都是像素-问题，在所有的手机上都是八个像素
             LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(10,10);
             if (i==0){
                 point.setEnabled(true);//显示红色
             }else{
                 point.setEnabled(false);//显示灰色
                 params.leftMargin=8;
             }

             point.setLayoutParams(params);
             ll_point_parent.addView(point);
         }


        //4.设置PagerAdapter-item布局-绑定数据
        viewPager.setAdapter(new MyPagerAdapter());

         //设置监听viewpager页面的改变
        viewPager.addOnPageChangeListener(new MyOnPageChangeListener());

        //设置中间位置
        int item=Integer.MAX_VALUE/2-Integer.MAX_VALUE/2%imageViewList.size();//要保证imageViewList的整数倍
        viewPager.setCurrentItem(item);

        tv_title.setText(imageDesrciptions[prePosition]);

        //发信息
        handler.sendEmptyMessageDelayed(0,3000);

    }

    class MyOnPageChangeListener implements ViewPager.OnPageChangeListener{

        /*
        * 当页面滚动的时候调用这个方法
        *
        * position当前页面的位置
        * positionOffset滑动页面的百分比
        * positionOffsetPixels在屏幕上滑动的像素
        * */
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {


        }
         /*
         * 当某个页面被选中了的时候回调
         * position 被选中页面的位置
         * */
        @Override
        public void onPageSelected(int position) {

            int realPosition=position%imageViewList.size();
           //设置对应页面的文本信息
            tv_title.setText(imageDesrciptions[realPosition]);
            //把上一个高亮的设置默认-灰色
            ll_point_parent.getChildAt(prePosition).setEnabled(false);
            // 当前的设置为高亮-红色
            ll_point_parent.getChildAt(realPosition).setEnabled(true);


            prePosition=realPosition;

        }
        /*

        * 当页面滚动状态变化的时候回调这个方法
        * 静止->滑动
        * 滑动->静止
        * 静止-->拖拽
        *
        * */
        @Override
        public void onPageScrollStateChanged(int state) {
            if (state==viewPager.SCROLL_STATE_DRAGGING){
                isScroll=true;
                handler.removeCallbacksAndMessages(null);
             Log.e(TAG,"SCROLL_STATE_DRAGGING----------------------------");

            }else if (state==viewPager.SCROLL_STATE_SETTLING){


                Log.e(TAG,"SCROLL_STATE_SETTLING----------------------------");

            }else if (state==viewPager.SCROLL_STATE_IDLE&&isScroll){
                isScroll=false;
                Log.e(TAG,"SCROLL_STATE_IDLE----------------------------");
                handler.removeCallbacksAndMessages(null);
                handler.sendEmptyMessageDelayed(0,4000);
            }


        }
    }
    class MyPagerAdapter extends PagerAdapter{

        //得到图片的总数
        @Override
        public int getCount() {
//            return imageViewList.size();
            //可以无限滚动
             return Integer.MAX_VALUE;
//            return 200;
        }

        //这个方法是比较view和object是否同一个实例
        //view 页面
        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {

//            if (view==object){
//                return true;
//            }else {
//                return false;
//            }
            return view==object;//简写
        }

        //相当于getView方法
        //container viewPager自身
        //position 当前实例化页面的位置

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {

            int realPostion=position%imageViewList.size();


            ImageView imageView=imageViewList.get(realPostion);
            container.addView(imageView);//添加到View pager中
            Log.e(TAG,"instantiateItem=="+realPostion+"---imageView"+imageView);

            //按下图片暂停
            imageView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    switch (motionEvent.getAction()){
                        case MotionEvent.ACTION_DOWN:
                            Log.e(TAG,"OnTouch==手指按下");
                            handler.removeCallbacksAndMessages(null);
                            break;
                         case MotionEvent.ACTION_MOVE://手指在这个控件移动
                             break;
                         case MotionEvent.ACTION_CANCEL://事件取消
                             Log.e(TAG,"OnTouch==事件取消");
//                             handler.removeCallbacksAndMessages(null);
//                             handler.sendEmptyMessageDelayed(0,4000);
                             break;
                        case MotionEvent.ACTION_UP://手指离开
                            Log.e(TAG,"OnTouch==手指离开");
                            handler.removeCallbacksAndMessages(null);
                            handler.sendEmptyMessageDelayed(0,4000);
                            break;
                    }
                    return false;
                }
            });

            imageView.setTag(position);
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Log.e(TAG,"点击事件");
                    int position=(int) view.getTag()%imageViewList.size();

                    String text=imageDesrciptions[position];
                    Toast.makeText(ViewPagerActivity.this,"text=="+text,Toast.LENGTH_SHORT).show();


                }
            });
            return imageView;



        }

        //释放资源
        //container viewpager
        //position 释放的位置
        //object 释放的页面
        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

           container.removeView((View) object);
            Log.e(TAG,"destroyItem=="+position+"---Object"+object);


        }
    }
}
